package com.netease.ntertainment.interview;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Stack;

import javafx.util.Pair;

/**
 * @author ZhangyiA
 * @describe:
 * @date 2021/07/07
 */

public class Three_RecipeMaking {

    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        int T = input.nextInt();
        while(T -- > 0){
            int n = input.nextInt();
            Map<Integer , Integer> M = new HashMap<>(); // 存放当前任务之前的所有任务时间和
            Stack<Pair<Integer , Integer>> S = new Stack<>(); // 存放当前父任务序列
            int id = -1 , maxtime = 0 ; // maxtime 记录的是当前需要消耗最大时长
            for(int i = 0 ; i < n ; i ++){
                int t = input.nextInt();  int e = input.nextInt();  int s = input.nextInt(); // 起始时间 , 序号 , 状态( 结束和开始 )
                if(s == 0) S.push(new Pair<>(t , e));
                else{
                    // 任务结束 ， 栈顶必定是这个任务的开始状态
                    // 计算当前任务的时长
                    int nowtime = t - S.peek().getKey(); // 当前任务所需要的时间 , 其中可能包含其它任务时间 ; 用 nowtime - cur_cost 代表当前任务的实际所需时间
                    int cur_cost = M.getOrDefault(M.get(e) , 0); // 查询当前任务之前所有任务时间和
                    if(nowtime - cur_cost > maxtime || (nowtime - cur_cost == maxtime && id > e)){
                        maxtime = nowtime - cur_cost;
                        id = e;
                    }
                    S.pop();
                    if(!S.isEmpty()){
                        int temp_e = S.peek().getValue();
                        M.put(temp_e , M.getOrDefault(temp_e , 0) + nowtime);
                    }
                }
            }
            System.out.println(id);
        }
    }
}
/*
1
8
1 1 0
5 2 0
10 3 0
20 3 1
25 4 0
40 4 1
1000 2 1
2000 1 1
* */
